【レポート】 ETL をサーバーレスで実現する新サービス AWS Glue のご紹介/AWS Solution Days 2017 ~AWS DB Day~ #AWSDBDay
2017年07月05日(水)に、大崎ブライトコアホールにて『AWS Solution Days 2017』なるイベントが開催されました。
イベントのコンセプトは以下(イベント紹介サイトより抜粋)。当エントリでは『ETL をサーバーレスで実現する新サービス AWS Glue のご紹介』セッションの模様をレポートします。
ちなみに当イベントは
目次
セッションレポート
登壇者及びセッションの内容詳細は以下の通りです。
下佐粉 昭(アマゾン ウェブ サービス ジャパン 株式会社 ソリューションアーキテクト)
セッション概要:
AWS では、データレイクの Amazon S3、DWH サービスである Amazon Redshift、Hadoop/Spark 基盤である Amazon Elastic MapReduce、BI サービスである Amazon QuickSight 等の多様なサービスでビッグデータ分析のための環境をご用意しております。
このファミリーに新しく加わるのが AWS Glue で、各種データソース (DB) からデータを取り出し (Extract)、変形し (Transform)、別のデータソースに投入する (Load) を行う ETL 処理をサーバーレスで実現する新サービス (現在 preview 中) です。このセッションでは AWS Glue の概要、特長やその機能についてご説明します。
はじめに
AWS Glueは現在(2017年07月05日現在)プレビュー中のリリース状況であるため、下記の形で断り書きが伝えられていました。
データレイクを中心とした大規模データ分析基盤
クラウド上での大規模データ分析
- (1).データをデータレイクに集め、多様な分析に繋げる
- (2).分析はスケールアウト可能なインフラの上で実現
作業としては大きく4つのフェーズに分類出来る。
- 収集:データを収集、データレイクへ格納
- 保存:全期間保存、共通APIでアクセス
- 分析:スケールアウト可能な技術で展開
- 可視化
データレイクとは?特徴は以下の様なものが挙げられる。
- 多様なデータを一元的に保存
- データを失わない
- サイズ制限からの開放
- 決められた方法(API)ですぐにアクセスできる
データレイクの実現にはAmazon S3を用いる。サイジング不要で高い耐久性、そして安価(10TB保存しても月約2.1万円)。
データレイク構築には「スケールアウト」(システムを構成するサーバーの台数を増やすことで、システムの処理能力を高めること)が鍵。
スケールアップもスケールアウトもクラウドでは容易だが、スケールアップにはCPUやメモリに限界もある。スケールアウト可能なテクノロジーを採用する事で、"規模の増加"にも耐えうる設計が行える。
スケールアウトが高価、という風に誤解しがちな部分もあるが実はそうでも無い。ノードを増やしても利用時間が短くなれば結果としてコストは同じ。
ユーザー操作でスケールアウト可能なAmazon Redshift、Amazon EMR、自動的にスケールアウトするAmazon Athenaといったサービスを活用する事で、スケールアウト可能なインフラ環境を備えたデータレイクを作成する事が可能。「収集」及び「プリプロセス」の部分が現時点では空きの状態となっているが、この部分にAWS Glueがハマる形となる。
クラウド上のETL - AWS Glue
- AWS Glue
- AWS Glue (完全マネージド型 ETL サービス) | AWS
- AWS上のETLサービス。
- E:Extract
- T:Transform
- L:Load
- 巨大データへのETL処理をスケールアウトで対応し、サーバレスで提供。
- ベースの技術にSparkを採用
- 大規模データに対して自動的にスケールアウトする仕組みを有しているのでスケールアウトのための設計が不要
- 「サーバレス」なジョブ実行環境
- AWS Glueはサーバ管理を意識しないで利用出来るサービスでもある。
- プロビジョン、コンフィグ、パッチ等が不要に。
- 処理に掛かったリソースのみの支払いとなる。(※利用費用については未定、変更の可能性あり)
「収集」及び「プリプロセス」の部分にAWS Glueが収まる事により、ビッグデータ分析基盤をサーバレスで実現する事が可能となる。
内部的にはSparkを採用しているという事で仕組み的にはAmazon EMRと近しい部分があるが、両者の比較をするとこのような形となる。
AWS Glueの機能
AWS Glueの全体像は以下のようなものとなる。
- データソースをクローラでクローリングし、メタデータを取得
- クローラ:ウェブ上の文書や画像などを周期的に取得し、自動的にデータベース化するプログラム。
- クローラ - Wikipedia
- メタデータはデータカタログで管理
- メタデータ:データについてのデータという意味で、あるデータが付随して持つそのデータ自身についての付加的なデータを指す。例)データの作成日時や作成者、データ形式、タイトル、注釈など
- メタデータ - Wikipedia
- メタデータを元にジョブを作成(ジョブ作成にはPySparkを用いる)
- ジョブはサーバレスな環境で実行される
そして、AWS Glueは、以下の3つの要素によって構成される。
- データカタログ
- Hiveメタストア互換のデータソース用メタデータリポジトリ
- テーブルやデータ型、パーティションフォーマットを推測する為にソースをクロールする
- ジョブオーサリング
- ETL処理のためのPythonコード(PySpark)を生成
- 任意のIDEでコードを作成可能
- オーケストレーション
- オートスケール:複数インスタンスでジョブを実行
- サーバレス:利用したリソース分だけの支払いとなる
Glueデータカタログ
- Glue データカタログ
- テーブルのメタデータをHiveメタストアで管理
- 主な管理メタデータ
- 列:プロパティ・型
- データロケーション(URI)
- 接続情報
- 更新情報
- クローラーによる自動チェックと登録を実施
- クローラーによるデータカタログの自動更新
- 自動的にスキーマを推測
- 情報を分類(Classifier)しスキーマとして抽出
- Grokフィルタでカスタマイズ可能
- クローラーのスケジュール実行で新しいデータやスキーマ変更を検知
- クローラーの手動実行も可能
- ログはCloudWatch Logsに出力される
- 自動的にスキーマを推測
- クローラーの対応データソース
- Amazon RDS(Aurora, MySQL, MariaDB, PostgreSQL)
- Amazon Redshift
- EC2上のRDB(JDBC接続)
- S3上のファイル(CSV, Avro, JSON等)
- Classifier
- 多様な種類を提供
- 圧縮ファイルにも対応:zip, bzip2, gzip, lz4, Snappy(標準Snappy)
- カスタムClassifierの作成も可能
ジョブオーサリング
- 自動的なジョブコード生成
- データソースとターゲットを指定し、ETLジョブを定義
- GUIで定義を決定→PySparkのコードが出力される(基本的な処理のみならばコード編集は不要)
- 柔軟な処理を提供するGlue ETLスクリプト
- 人間が読める、編集しやすいコードを出力
- PySparkのライブラリを活用
- 任意のエディタで編集可能
- 生成コードはETL図に連動したアノテーションが付与される
- PySpark extensionと外部ライブラリ
- 変換に用いた処理をPySparkのextensionとして用意(済のものがあるらしい)
- 多彩な出力フォーマットに対応しており、プログラム不要
- PySparkコード+ライブラリで柔軟な処理が実現可能に
オーケストレーション&リソース管理
- ジョブの定義と実行
- 作成したETLスクリプトを読み込んで実行(IAM Roleで権限設定)
- ジョブの実行開始方法はAPIコール(手動),トリガーが用意されているとの事
- リトライ制限の指定や、パラメータを渡す事が可能
- 実行ログ・エラーログはCloudWatch Logsに出力
- トリガー:ジョブ実行のタイミングを指定
- 先行ジョブ完了時
- スケジュール
- オンデマンド
- サーバレスのジョブ実行環境:以下の様な仕組みで実現
- ジョブ実行時のVPC内へのアクセス
- GlueはVPC外部のサービスだが、VPC内に存在する様に見える。
- S3アクセスする場合はVPC Endpointの設定が必須となる
まとめ
という訳で、AWS上でサーバレスなETLを実現するサービス、AWS Glueに関する解説セッションのご紹介でした。現在プレビュー版という事でまだ一般公開・利用は出来ていない状況ですが、内容を見てみる限りだと非常に便利そうですね。PySparkも知識を身に付けておくとフル活用出来そうです。下記公式サイトよりプレビュー版利用申請が可能となっておりますので、気になる方は一般公開利用に先立ってAWS Glueをお試し活用してみてください。